/**
 * Copyright (c) 2013 onionframework.org
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 */
package org.onionframework.event;

import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

/**
 * Spring事件的监听器
 * 
 * 当有Spring Event被触发时，调用Events类的fire方法触发Onion事件
 * 
 * 从而，要监听一个Spring Event，可以写EventListener，也可以在一
 * 个方法上面标记@Observer(type=YourEventType.class)，如果采用后
 * 者，那么要求这个方法必须有且只有一个参数，类型就是这个事件类型
 * 
 * 
 * @author allan
 *
 */
@Component
public class SpringEventListener implements ApplicationListener<ApplicationEvent> {

	static String SPRING_EVENT_PREFIX = "SpringEvent-";
	
	static String getEventKey(Class<? extends ApplicationEvent> eventType){
		return SPRING_EVENT_PREFIX + eventType.getName();
	}
	
	@Override
	public void onApplicationEvent(ApplicationEvent event) {
		Events.instance().fire(getEventKey(event.getClass()), event);
	}

}
